// import { Workbook } from 'exceljs';

// // 公用方法，生成 Excel 文件
// export async function generateExcelFn(data: any[]) {
//   // 创建工作簿
//   const workbook = new Workbook();
//   const worksheet: any = workbook.addWorksheet('Sheet1');

//   // 定义蓝色表头样式
//   const headerStyle = {
//     font: { bold: true, color: { argb: 'FFFFFFFF' } },
//     fill: { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF0070C0' } },
//     alignment: { horizontal: 'center', vertical: 'middle' },
//     border: {
//       top: { style: 'thin' },
//       left: { style: 'thin' },
//       bottom: { style: 'thin' },
//       right: { style: 'thin' },
//     },
//   };

//   // 添加主表头
//   const mainHeaders = [
//     '备注',
//     '创建时间',
//     '创建人',
//     '修改时间',
//     '修改人',
//     '项目名称',
//     '类型',
//     '保养项目1',
//     '单位',
//     '部位',
//   ];
//   worksheet.addRow(mainHeaders);

//   // 设置主表头样式
//   worksheet.getRow(1).eachCell((cell) => {
//     cell.style = headerStyle;
//   });

//   // 动态生成子表头
//   const maxListLength = Math.max(...data.map((item) => item.list.length));
//   for (let i = 0; i < maxListLength; i++) {
//     const startCol = 10 + i * 3; // 每个子表占3列
//     worksheet.getCell(1, startCol).value = `保养项目${i + 2}`;
//     worksheet.mergeCells(1, startCol, 1, startCol + 2); // 合并单元格

//     worksheet.getCell(2, startCol).value = '项目名称';
//     worksheet.getCell(2, startCol + 1).value = '类型';
//     worksheet.getCell(2, startCol + 2).value = '备注';

//     // 设置子表头样式
//     worksheet.getCell(1, startCol).style = headerStyle;
//     worksheet.getCell(2, startCol).style = headerStyle;
//     worksheet.getCell(2, startCol + 1).style = headerStyle;
//     worksheet.getCell(2, startCol + 2).style = headerStyle;
//   }

//   // 插入数据
//   data.forEach((item, rowIndex) => {
//     const row = worksheet.addRow([
//       '',
//       '', // 备注占位
//       'system', // 创建人
//       new Date(), // 创建时间
//       'system', // 修改人
//       '项目名称', // 项目名称
//       '日', // 类型
//       '', // 保养项目1
//       '单位',
//       '部位',
//     ]);

//     // 动态填充子表数据
//     item.list.forEach((subItem, subIndex) => {
//       const startCol = 10 + subIndex * 3;
//       row.getCell(startCol).value = subItem.badName;
//     });
//   });

//   // 设置列宽度和自动换行
//   worksheet.columns.forEach((column) => {
//     column.width = 15;
//   });

//   // 保存文件
//   const buffer: any = await workbook.xlsx.writeBuffer();

//   return buffer;
// }

import ExcelJS from 'exceljs';

import i18n from '@main/i18n';

// 公用方法，生成 Excel 文件
export async function generateExcelFn(expotOptions, lang) {
  const langObj = i18n[lang]['common']['table'];

  const {
    mainHeaderList = [],
    childHeaderList = [],
    dataList = [],
    childHeadersName = '',
    sheetName = 'Sheet1',
  } = expotOptions;

  const mList = mainHeaderList.map((item) => langObj[item.label]);

  const cList = childHeaderList.map((item) => langObj[item.label]);

  // 创建工作簿
  const workbook = new ExcelJS.Workbook();
  const worksheet: any = workbook.addWorksheet(langObj[sheetName] || sheetName);

  // 定义蓝色表头样式
  const headerStyle = {
    font: { bold: true, color: { argb: 'FFFFFFFF' } },
    fill: { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF0070C0' } },
    alignment: { horizontal: 'center', vertical: 'middle' },
    border: {
      top: { style: 'thin' },
      left: { style: 'thin' },
      bottom: { style: 'thin' },
      right: { style: 'thin' },
    },
  };

  // 检查子表是否有数据
  const hasSubTable = dataList.some((item) => item.list && item.list.length > 0);
  let maxListLength = 0;

  if (hasSubTable) {
    maxListLength = Math.max(...dataList.map((item) => item.list.length));
  }

  // 添加主表头
  worksheet.addRow(mList);

  // 合并单元格并设置主表头样式
  if (hasSubTable) {
    for (let i = 1; i <= mList.length; i++) {
      worksheet.mergeCells(1, i, 2, i);
    }

    worksheet.getRow(2).eachCell((cell) => {
      cell.style = headerStyle;
    });
  }

  worksheet.getRow(1).eachCell((cell) => {
    cell.style = headerStyle;
  });

  // 如果有子表，动态生成子表头
  if (hasSubTable) {
    for (let i = 0; i < maxListLength; i++) {
      const startCol = mList.length + 1 + i * cList.length; // 每个子表占3列

      worksheet.getCell(1, startCol).value = `${langObj[childHeadersName]}${i + 1}`;
      worksheet.mergeCells(1, startCol, 1, startCol + cList.length - 1); // 合并子表项目的表头

      for (let j = 0; j < cList.length; j++) {
        worksheet.getCell(2, startCol + j).value = cList[j];

        worksheet.getCell(2, startCol + j).style = headerStyle;

        worksheet.getCell(1, startCol + j).style = headerStyle;

        // worksheet.getCell(j+1, startCol + j+1).style = headerStyle;
      }

      // worksheet.getCell(2, startCol).value = '项目名称';
      // worksheet.getCell(2, startCol + 1).value = '类型';
      // worksheet.getCell(2, startCol + 2).value = '备注';

      // 设置子表头样式
      // worksheet.getCell(1, startCol).style = headerStyle;
      // worksheet.getCell(2, startCol).style = headerStyle;
      // worksheet.getCell(2, startCol + 1).style = headerStyle;
      // worksheet.getCell(2, startCol + 2).style = headerStyle;
    }
  }

  // // 插入数据
  dataList.forEach((item) => {
    const rowDataList = [];

    for (const mItem of mainHeaderList) {
      if (!['', null, undefined].includes(item[mItem['prop'] || mItem['label']])) {
        rowDataList.push(item[mItem['prop'] || mItem['label']]);
      } else {
        rowDataList.push('-');
      }
    }

    // 动态填充子表数据
    if (item.list && item.list.length > 0) {
      console.log(item.list);
      for (const lItem of item.list) {
        for (const cItem of childHeaderList) {
          if (!['', null, undefined].includes(lItem[cItem['prop'] || cItem['label']])) {
            rowDataList.push(lItem[cItem['prop'] || cItem['label']]);
          } else {
            rowDataList.push('-');
          }
        }
      }
    }

    worksheet.addRow(rowDataList);
  });

  // 设置列宽度和自动换行
  worksheet.columns.forEach((column) => {
    column.width = 15;
  });

  // 保存文件
  const buffer: any = await workbook.xlsx.writeBuffer();

  return buffer;
}
